/*
 *  SkeletalMesh.h
 *  glow
 *
 *  Created by sunjun on 11-6-14.
 *  Copyright 2011 sunstdio. All rights reserved.
 *
 */
//////////////////////////////////////////////////////////////////////////

#ifndef __SkeletalMesh__
#define __SkeletalMesh__

//////////////////////////////////////////////////////////////////////////

#if defined __cplusplus

//////////////////////////////////////////////////////////////////////////

#include <GReference.h>

//////////////////////////////////////////////////////////////////////////

NAMESPACE_BEGIN(Engine)

//////////////////////////////////////////////////////////////////////////

	typedef GPtr<class SkeletalMesh>SkeletalMeshPtr;

	//////////////////////////////////////////////////////////////////////////

	// this class provides an object-oriented skeletal mesh interface.
	class SkeletalMesh : public GReference
	{
	public:
		// constructor
		SkeletalMesh();

		// destructor
		virtual ~SkeletalMesh();

		// Load the data
		VOID Load(const GData* data);

		// bind the bone
		VOID Bind(const AnimBone* b);

		// draw the model
		VOID Draw(Graph *gc);

	protected:
		struct BONE
		{
			Str name;
			Matrix base;
			AnimBone* source;
		};
		struct PRIMITIVE
		{
			std::vector<BONE>bones;
			std::vector<Vector4>transforms;
			PrimitivePtr primitive;
		};

	protected:
		std::vector<PRIMITIVE>mPrimitives;
		std::list<KeyPtr>mKeys;
	};

//////////////////////////////////////////////////////////////////////////

NAMESPACE_END

//////////////////////////////////////////////////////////////////////////

#endif // __cplusplus

//////////////////////////////////////////////////////////////////////////

#endif // __SkeletalMesh__

//////////////////////////////////////////////////////////////////////////